import request from '@/utils/request'

/**
 * 人脸识别相关API
 */

/**
 * 人脸注册
 * @param {Object} data - 注册数据
 * @param {string} data.username - 用户名
 * @param {string} data.imageData - Base64编码的图片数据
 */
export function registerFace(data) {
  // 后端需要FormData格式
  const formData = new FormData()

  // 添加用户信息 - 注意后端参数名是 name，不是 username
  formData.append('name', data.username)
  formData.append('remark', `注册用户: ${data.username}`)

  // 处理图片数据
  if (data.imageData && data.imageData.startsWith('data:image')) {
    // 将base64转换为blob
    const base64Data = data.imageData.split(',')[1]
    const byteCharacters = atob(base64Data)
    const byteNumbers = new Array(byteCharacters.length)
    for (let i = 0; i < byteCharacters.length; i++) {
      byteNumbers[i] = byteCharacters.charCodeAt(i)
    }
    const byteArray = new Uint8Array(byteNumbers)
    const blob = new Blob([byteArray], { type: 'image/jpeg' })

    // 注意后端参数名是 files，是数组格式
    formData.append('files', blob, 'face.jpg')
  }

  return request({
    url: '/fact-info/save', // 修正API路径
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 人脸识别登录
 * @param {Object} data - 登录数据
 * @param {string} data.imageData - Base64编码的图片数据
 */
export function faceLogin(data) {
  // 后端需要JSON格式，包含完整的Base64数据
  return request({
    url: '/fact-info/check',
    method: 'post',
    data: {
      imageData: data.imageData // 确保包含完整的data:image/jpeg;base64,前缀
    }
  })
}

/**
 * 人脸比对
 * @param {Object} data - 比对数据
 * @param {string} data.imageData1 - 第一张图片的Base64数据
 * @param {string} data.imageData2 - 第二张图片的Base64数据
 */
export function compareFaces(data) {
  return request({
    url: '/fact-info/compare',
    method: 'post',
    data
  })
}

/**
 * 获取用户人脸信息列表
 */
export function getFaceList() {
  return request({
    url: '/fact-info/list',
    method: 'get'
  })
}

/**
 * 根据用户名查询人脸信息
 * @param {string} username - 用户名
 */
export function getFaceByUsername(username) {
  return request({
    url: `/fact-info/user/${username}`,
    method: 'get'
  })
}

/**
 * 删除人脸信息
 * @param {string} userId - 用户ID
 */
export function deleteFace(userId) {
  return request({
    url: `/fact-info/delete/${userId}`,
    method: 'delete'
  })
}

/**
 * 更新人脸信息
 * @param {Object} data - 更新数据
 * @param {string} data.id - 用户ID
 * @param {string} data.username - 用户名
 * @param {string} data.phone - 手机号
 * @param {string} data.email - 邮箱
 * @param {string} data.imageData - Base64编码的图片数据（可选）
 */
export function updateFace(data) {
  return request({
    url: '/fact-info/update',
    method: 'put',
    data
  })
}

/**
 * 批量删除人脸信息
 * @param {Array} userIds - 用户ID数组
 */
export function batchDeleteFaces(userIds) {
  return request({
    url: '/fact-info/batch-delete',
    method: 'delete',
    data: { userIds }
  })
}

/**
 * 获取人脸识别统计信息
 */
export function getFaceStats() {
  return request({
    url: '/fact-info/stats',
    method: 'get'
  })
}

/**
 * 测试人脸检测
 * @param {Object} data - 测试数据
 * @param {string} data.imageData - Base64编码的图片数据
 */
export function testFaceDetection(data) {
  return request({
    url: '/fact-info/test-detection',
    method: 'post',
    data
  })
}

/**
 * 上传人脸图片文件
 * @param {File} file - 图片文件
 */
export function uploadFaceImage(file) {
  const formData = new FormData()
  formData.append('file', file)
  
  return request({
    url: '/fact-info/upload',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}
